#ifndef __USER_H__
#define __USER_H__

/**
 * 逻辑结构 双向循环链表
 * 存储结构 链式存储
 * 功能 : 用于实现对航班信息 的增 删 改 查 判空 清空 销毁 排序 文件写入  文件读取
 */

// 引入头文件
#include "head.h"

// 数据对象
typedef struct u_data
{
    char name[16]; 		//用户名
    char passwd[64];	//用户密码
    int grade ;  		//用户身份证信息
    int value ;  		//余额
    char * ticket[10];	//指针数组:存储航班信息。
}u_data;

// 航班信息节点 - 双向循环链表
typedef struct u_node
{
    u_data data;
    struct u_node * prev;
    struct u_node * next;
}u_node;
// 航班信息头结点
typedef struct u_list
{
    struct u_node * next;
}u_list;


// 数据操作
void user_data_file_print(u_list *list,const char *file_name);      //  向文件写入用户信息
void user_data_file_scanf(u_list* list,const char *file_name);      //  向文件读取用户信息

int get_circulate_node_count_u(u_list *list);


//头节点到尾节点的节点个数
int get_circulate_node_count_u(u_list *list);

// 双向链表的创建
u_list* init_double_link_list_u();

// 双向链表的插入
void insert_double_node_u(u_list* list, u_data data, int pos);

// 双向链表的删除
void delete_double_node_u(u_list *list, int pos);

// 双向链表的查找
u_node* find_double_node_pos_u(u_list* list, int id);
u_node* find_double_node_name_u(u_list* list, char* name);

// 双向链表的遍历
void print_forward_double_link_list_u(u_list* list);
void print_backwards_double_link_list_u(u_list* list);
// 双向链表的判空
int is_empty_double_link_list_u(u_list* list);

// 双向链表的清空
void clear_double_link_list_u(u_list* list);

// 双向链表的合并
u_list* merge_double_link_lists_u(u_list* list1, u_list* list2);

// 双向链表的销毁
void free_double_link_list_u(u_list** list);
#endif // __USER_H__
